import pymysql


class DBTools(object):
    """定义 普通 数据库 工具 类"""

    @staticmethod
    def __create_conn():   # 修改为 私有方法，只在类定义内，可以使用。
        """创建数据库连接"""
        conn = pymysql.connect(host="211.103.136.244", port=7061, user="student",
                               password="iHRM_student_2022", database="ihrm", charset="utf8")
        # 将 数据库连接对象，返回给调用者
        return conn

    @staticmethod
    def query_one(sql):
        """查询一条"""
        conn = None
        cursor = None
        res = None
        try:
            conn = DBTools.__create_conn()  # 使用类名调用静态方法，创建连接
            cursor = conn.cursor()  # 创建游标
            cursor.execute(sql)  # 执行 用户传入的 查询sql语句
            res = cursor.fetchone()  # 提取一条
        except Exception as err:
            print("查询时，出现异常：", err)
        finally:
            cursor.close()  # 关闭游标
            conn.close()  # 关闭连接
            return res  # 返回查询结果，给调用者

    @staticmethod
    def query_many(sql,n):
        """查询一条"""
        conn = None
        cursor = None
        res = None
        try:
            conn = DBTools.__create_conn()  # 使用类名调用静态方法，创建连接
            cursor = conn.cursor()  # 创建游标
            cursor.execute(sql)  # 执行 用户传入的 查询sql语句
            res = cursor.fetchmany(n)  # 提取n条
        except Exception as err:
            print("查询时，出现异常：", err)
        finally:
            cursor.close()  # 关闭游标
            conn.close()  # 关闭连接
            return res  # 返回查询结果，给调用者

    @staticmethod
    def db_iud(sql):
        """增、删、改"""
        conn = None
        cursor = None
        try:
            conn = DBTools.__create_conn()  # 使用类名调用静态方法，创建连接
            cursor = conn.cursor()  # 创建游标
            cursor.execute(sql)  # 执行 用户传入的 增删改sql语句
            conn.commit()  # 提交事务
            print("增删改 sql 执行成功！")
        except Exception as err:
            print("增删改时，出现异常：", err)
            conn.rollback()  # 回滚事务
        finally:
            cursor.close()  # 关闭游标
            conn.close()  # 关闭连接


if __name__ == '__main__':
    # 方法封装完，自测 是否 好用！测试 查询方法
    res = DBTools.query_one("select * from t_book where id = 129;")
    print("查询的结果：", res)

    # 测试 增删改方法
    # DBTools.db_iud("update t_book set `read` = 100 where id = 105;")
    DBTools.db_iud("delete from t_book where id = 105;")
